package com.exercise.DesignPattern.CreationalPatterns.BuilderPattern;

/**
 * 建造者模式
 *
 * 核心思想：使用多个简单的对象一步一步构建一个复杂的对象。
 * 实现方式：定义一个建造者接口和具体建造者类，通过建造者类来创建复杂对象。
 * 应用场景：StringBuilder、AlertDialog.Builder。
 *
 * 优点：
 * 解耦：将复杂对象的构建与表示解耦。
 * 灵活性：可以根据需要创建不同表示的复杂对象。
 */
public class ConcreteBuilder{

    // 静态工厂方法
    public static Product createProduct(String partA, String partB) {
        return new Product(partA, partB);
    }
    // 使用静态内部类
    public static class Builder {
        private String partA;
        private String partB;

        public Builder withPartA(String partA) {
            this.partA = partA;
            return this;
        }

        public Builder withPartB(String partB) {
            this.partB = partB;
            return this;
        }

        public Product build() {
            return new Product(partA, partB);
        }

        @Override
        public String toString() {
            return "Builder{" +
                    "partA='" + partA + '\'' +
                    ", partB='" + partB + '\'' +
                    '}';
        }
    }
}
class Client {
    public static void main(String[] args) {

        Product product = new ConcreteBuilder.Builder()
                .withPartA("A")
                .withPartB("B")
                .build();
        System.out.println(product);
    }
}
